package v1

import (
	"github.com/gin-gonic/gin"
	"github.com/spf13/cast"
	"hr/api/dto"
	"hr/api/middleware"
	"hr/db"
	"hr/utils"
)

// GetCompanyProfile
// @Summary 获取所有公司简介和服务宣传
// @Tags 公司简介和服务宣传相关api
// @Accept  json
// @Produce json
// @Param Access-Token header string true "Authentication header"
// @Param pageNo query string true "页码"
// @Param pageSize query string true "页大小"
// @Param name query string false "名称"
// @Param tag query string true "区分是公司简介还是服务宣传（1 公司简介 2服务宣传）"
// @Success 200 {object} utils.JsonContent
// @Failure 400 {object} utils.JsonContent
// @Failure 500 {object} utils.JsonContent
// @Router /api/v1/auth/company_profile [get]
func GetCompanyProfile(c *gin.Context)  {
	pageNoStr := c.Query("pageNo")
	pageSizeStr := c.Query("pageSize")
	name := c.Query("name")
	tag := c.Query("tag")

	var pageNo,pageSize int
	if !utils.IsStringEmpty(pageNoStr) {
		pageNo = cast.ToInt(pageNoStr)
	}
	if !utils.IsStringEmpty(pageSizeStr) {
		pageSize = cast.ToInt(pageSizeStr)
	}
	paging := &dto.Pagination{
		PageNo:  pageNo,
		PageSize: pageSize,
	}

	d, err := db.GetCompanyProfilePaging(*paging, name, tag)
	if err != nil {
		utils.EchoError(c, err.Error())
		return
	}
	utils.EchoSuccess(c, d, "请求成功")
	return
}

// CreateCompanyProfile
// @Summary 创建公司简介和服务宣传类型
// @Tags 公司简介和服务宣传相关api
// @Accept  json
// @Produce json
// @Param Access-Token header string true "Authentication header"
// @Param CompanyProfileRequest body dto.CompanyProfileRequest true "信息"
// @Success 200 {object} utils.JsonContent
// @Failure 400 {object} utils.JsonContent
// @Failure 500 {object} utils.JsonContent
// @Router /api/v1/auth/company_profile [post]
func CreateCompanyProfile(c *gin.Context)  {
	p := &dto.CompanyProfileRequest{}
	if err := c.ShouldBindJSON(p); err != nil {
		utils.EchoError(c,"缺少必要参数信息")
		return
	}
	id, _ := middleware.GetCurrentUserId(c)
	m, err := db.CreateCompanyProfile(*p, cast.ToString(id))
	if err != nil {
		utils.EchoError(c, err.Error())
		return
	}

	utils.EchoSuccess(c, m, "创建成功")
	return
}

// UpdateCompanyProfile
// @Summary 更新公司简介和服务宣传
// @Tags 公司简介和服务宣传相关api
// @Accept  json
// @Produce json
// @Param Access-Token header string true "Authentication header"
// @Param CompanyProfileRequest body dto.CompanyProfileRequest true "信息"
// @Param id path string true "主键ID"
// @Success 200 {object} utils.JsonContent
// @Failure 400 {object} utils.JsonContent
// @Failure 500 {object} utils.JsonContent
// @Router /api/v1/auth/company_profile/{id} [put]
func UpdateCompanyProfile(c *gin.Context)  {
	p := &dto.CompanyProfileRequest{}
	if err := c.ShouldBindJSON(p); err != nil {
		utils.EchoError(c,"缺少必要参数信息")
		return
	}
	idStr := c.Param("id")
	if utils.IsStringEmpty(idStr) {
		utils.EchoError(c,"缺少ID")
		return
	}
	_, _ ,tag := db.GetCompanyProfile(map[string]interface{}{"id": idStr})
	if tag == "0" || tag == "1" {
		utils.EchoError(c,"此公司简介和服务宣传不存在")
		return
	}
	id, _ := middleware.GetCurrentUserId(c)
	m, err := db.UpdateCompanyProfile(cast.ToUint(idStr),*p, cast.ToString(id))
	if err != nil {
		utils.EchoError(c, err.Error())
		return
	}

	utils.EchoSuccess(c, m, "更新成功")
	return
}

// DeleteCompanyProfile
// @Summary 删除公司简介和服务宣传
// @Tags 公司简介和服务宣传相关api
// @Accept  json
// @Produce json
// @Param Access-Token header string true "Authentication header"
// @Param id path string true "主键ID"
// @Success 200 {object} utils.JsonContent
// @Failure 400 {object} utils.JsonContent
// @Failure 500 {object} utils.JsonContent
// @Router /api/v1/auth/company_profile/{id} [delete]
func DeleteCompanyProfile(c *gin.Context)  {
	idStr := c.Param("id")
	if utils.IsStringEmpty(idStr) {
		utils.EchoError(c,"缺少ID")
		return
	}
	_, _ ,tag := db.GetCompanyProfile(map[string]interface{}{"id": idStr})
	if tag == "0" || tag == "1" {
		utils.EchoError(c,"此公司简介和服务宣传不存在")
		return
	}
	_, err := db.DeleteCompanyProfile(cast.ToUint(idStr))
	if err != nil {
		utils.EchoError(c, err.Error())
		return
	}

	utils.EchoSuccess(c, nil, "删除成功")
	return
}


